]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
bluetooth: Add getDeviceInfos function
authorMariana Picolo <marianapicolo@hotmail.com>
Mon, 30 Mar 2020 08:48:06 +0000 (05:48 -0300)
committerMariana Pícolo <marianapicolo@hotmail.com>
Thu, 2 Apr 2020 00:15:37 +0000 (00:15 +0000)
In case where only one device is connected, we want to display its name
in the menu. For that we will need more than the number of known/connected
devices, so change the function to return an array of device infos instead.

https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/2340

js/ui/status/bluetooth.js

index 957669dbb0f30d28b1e7e0f6f60e22e79a3d981a..8ba98ab4913c2b475b0c493ecf89c615998f8356 100644 (file)
@@ -72,46 +72,44 @@ class Indicator extends PanelMenu.SystemIndicator {
         return null;
     }
 
-    // nDevices is the number of devices setup for the current default
-    // adapter if one exists and is powered. If unpowered or unavailable,
-    // nDevice is "1" if it had setup devices associated to it the last
-    // time it was seen, and "-1" if not.
-    //
-    // nConnectedDevices is the number of devices connected to the default
-    // adapter if one exists and is powered, or -1 if it's not available.
-    _getNDevices() {
-        let adapter = this._getDefaultAdapter();
+    _getDeviceInfos(adapter) {
         if (!adapter)
-            return [this._hadSetupDevices ? 1 : -1, -1];
+            return [];
 
-        let nConnectedDevices = 0;
-        let nDevices = 0;
+        let deviceInfos = [];
         let [ret, iter] = this._model.iter_children(adapter);
         while (ret) {
-            let isConnected = this._model.get_value(iter,
-                                                    GnomeBluetooth.Column.CONNECTED);
-            if (isConnected)
-                nConnectedDevices++;
-
-            let isPaired = this._model.get_value(iter,
-                                                 GnomeBluetooth.Column.PAIRED);
-            let isTrusted = this._model.get_value(iter,
-                                                  GnomeBluetooth.Column.TRUSTED);
-            if (isPaired || isTrusted)
-                nDevices++;
+            const isPaired = this._model.get_value(iter,
+                GnomeBluetooth.Column.PAIRED);
+            const isTrusted = this._model.get_value(iter,
+                GnomeBluetooth.Column.TRUSTED);
+
+            if (!isPaired && !isTrusted)
+                continue;
+
+            deviceInfos.push({
+                connected: this._model.get_value(iter,
+                    GnomeBluetooth.Column.CONNECTED),
+            });
+
             ret = this._model.iter_next(iter);
         }
 
-        if (this._hadSetupDevices != (nDevices > 0)) {
+        if (this._hadSetupDevices !== (deviceInfos.length > 0)) {
             this._hadSetupDevices = !this._hadSetupDevices;
             global.settings.set_boolean(HAD_BLUETOOTH_DEVICES_SETUP, this._hadSetupDevices);
         }
 
-        return [nDevices, nConnectedDevices];
+        return deviceInfos;
     }
 
     _sync() {
-        let [nDevices, nConnectedDevices] = this._getNDevices();
+        let adapter = this._getDefaultAdapter();
+        let devices = this._getDeviceInfos(adapter);
+        const connectedDevices = devices.filter(dev => dev.connected);
+        const nConnectedDevices = connectedDevices.length;
+        const nDevices = devices.length;
+
         let sensitive = !Main.sessionMode.isLocked && !Main.sessionMode.isGreeter;
 
         this.menu.setSensitive(sensitive);
@@ -127,7 +125,7 @@ class Indicator extends PanelMenu.SystemIndicator {
         if (nConnectedDevices > 0)
             /* Translators: this is the number of connected bluetooth devices */
             this._item.label.text = ngettext("%d Connected", "%d Connected", nConnectedDevices).format(nConnectedDevices);
-        else if (nConnectedDevices == -1)
+        else if (adapter === null)
             this._item.label.text = _("Off");
         else
             this._item.label.text = _("On");